///@Description(描述)     xxxx
///@author(作者)          zhangyinhong
///@create(时间)          2025-08-11 15:48

//只重建某个文件：dart run build_runner build --build-filter="lib/.../version_model.dart"
import 'package:freezed_annotation/freezed_annotation.dart';
part 'version_model.freezed.dart';
part 'version_model.g.dart';
//
// 数据模型：通常用 @freezed，保证数据不可变性
// 需要频繁修改的类：用 @unfreezed
// @freezed
// class UserModel with _$UserModel {
//     const factory UserModel({
//         // 必填字段
//         required String name,
//         required String email,
//
//         // 可选字段
//         String? avatar,
//
//         // 带默认值的字段
//         @Default(0) int age,
//         @Default(false) bool isVip,
//         @Default([]) List<String> tags,
//
//         // 自定义字段名映射
//         @JsonKey(name: 'user_id') required String userId,
//         @JsonKey(name: 'created_at') DateTime? createdAt,
//
//         // 忽略字段（不参与JSON序列化）
//         @JsonKey(ignore: true) String? localCache,
//         // 自定义序列化/反序列化
//         @JsonKey(
//             fromJson: _timestampFromJson,
//             toJson: _timestampToJson,
//         ) DateTime? lastLogin,
//
//         // 枚举类型
//         @Default(UserStatus.active) UserStatus status,
//     }) = _UserModel;
//
//     factory UserModel.fromJson(Map<String, dynamic> json) =>
//         _$UserModelFromJson(json);
// }
//
// // 自定义转换函数
// DateTime? _timestampFromJson(int? timestamp) {
//     return timestamp != null
//         ? DateTime.fromMillisecondsSinceEpoch(timestamp * 1000)
//         : null;
// }
//
// int? _timestampToJson(DateTime? dateTime) {
//     return dateTime?.millisecondsSinceEpoch;
// }
//
// enum UserStatus {
//     @JsonValue('active') active,
//     @JsonValue('inactive') inactive,
//     @JsonValue('banned') banned,
// }
// versionModel?.toJson() toJson自带的

// 结Freezed的主要优势：
// 代码生成：减少样板代码
// 不可变性：线程安全，状态管理友好
// 类型安全：编译时检查
// JSON支持：自动序列化/反序列化
// 联合类型：强大的状态建模
// 性能优化：高效的equals和hashCode
// 开发体验：智能提示和重构支持


@freezed
class VersionModel  with _$VersionModel {
    const factory VersionModel({
        required String version,
        required int vesCode,
        required String updateContent,
        required int updateType,
        required String path,
    }) = _VersionModel;

    factory VersionModel.fromJson(Map<String, dynamic> json) =>
        _$VersionModelFromJson(json);
        
    /// 静态方法，用于自动调用
    // static VersionModel fromJsonMap(Map<String, dynamic> json) =>
    //     _$VersionModelFromJson(json);
}